#ifndef ASCENSOR_H_
#define ASCENSOR_H_

#include "../lib/ManejadorSemAscensores.h"
#include "../lib/ManejadorSemPisos.h"
#include "../lib/MonitorAscensores.h"
#include "../lib/MonitorPisos.h"
#include "../lib/Cola.h"
#include "../lib/Logger.h"
#include "../lib/TiposDatos.h"


class Ascensor {

private:

	void log(string message);

	void debug(string message);

	void sync(string message);

	void abrirParaEgreso(int piso);

	void habilitarIngresoSubida(int piso);

	void habilitarIngresoBajada(int piso);

	void mandarMensaje();

	void irProxPiso();

	int cantPisos;

	int velocidad;

	int numero;

	int proxPiso;

	char estado;

	ManejadorSemAscensores* manejadorSemAsc;

	ManejadorSemPisos* manejadorSemPisos;

	MonitorAscensores* mAscensor;

	MonitorPisos* mPisos;

	Cola<mensaje>* cola;

	Logger* logger;

public:

	Ascensor(int cantPisos, int velocidad, bool modoDebug, bool modoLog,
			bool modoSyn, bool modoCout, int cantidadAscensores, int capacidad,
			int numero_asc);

	virtual ~Ascensor();

	int start();
};

#endif /* ASCENSOR_H_ */
